home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 35 / Amiga Format AFCD35 (Issue 119, Jan 1999).iso / -in_the_mag- / reader_requests / fredobbutils / bbsrc / showmem.s < prev    next >
Text File  |  1998-11-06  |  7KB  |  458 lines

  1. *** ShowMem    V1.0    by Frédo'96 !
  2. * Visualise la mémoire CHIP à l'aide du Blitter
  3. *
  4. * View chip memory's contents using the blitter (system-friendly)
  5. *
  6. * Keys: space, del, arrows, keypad +, keypad -
  7. *    Rightmouse to quit
  8. *
  9.  
  10.     incdir    ASM:/Include/
  11.     include    equ.s
  12.     include    exec/types.i
  13.     include    graphics/text.i
  14.     include    graphics/gfx.i
  15.     include    graphics/rastport.i
  16.  
  17.     rsreset
  18. planes    rs.l    1
  19. gfxbase    rs.l    1
  20. himem    rs.l    1
  21. olddma    rs.w    1
  22. copadr    rs.l    1
  23. xstart    rs.w    1
  24. ystart    rs.w    1
  25. scrw    rs.w    1
  26. scrh    rs.w    1
  27. charw    rs.w    1
  28. charh    rs.w    1
  29. src    rs.l    1
  30. modulo    rs.w    1
  31. myres    rs.b    1
  32. lastkey    rs.b    1
  33. rast    rs.b    rp_SIZEOF
  34. bmap    rs.b    bm_SIZEOF
  35. strbuf:    rs.b    64
  36. VARSIZE    rs.w    0
  37.  
  38. WIDTH=320*2
  39. HEIGHT=256
  40. DEPTH=1
  41. PLSIZE=(WIDTH/8)*HEIGHT
  42. PLANESIZE=PLSIZE*DEPTH
  43.  
  44. LORES=%0001001000000000        ;ajuster le nbre de bitplanes
  45. HIRES=LORES!$8000
  46. LACE=4
  47.  
  48. COL0=$000
  49. COL1=$fff
  50. COL2=$66d
  51. COL3=$777
  52.  
  53. DEFSRC=$0
  54. DEFMOD=80
  55. VAL=80*10
  56. LOVAL=2
  57.  
  58. ;BOOT=1
  59. DBUG=0
  60.  
  61. Start:
  62.     IFND    DBUG
  63.     dc.b    "DOS",0
  64.     dc.l    0,880
  65.     ENDC
  66. Main:
  67.     lea    dosname(pc),a1
  68.     IFD    DBUG
  69.     move.l    4.w,a6
  70.     ENDC
  71.     jsr    -96(a6)
  72.     move.l    d0,a0
  73.     move.l    22(a0),a0
  74.     moveq    #0,d0
  75.  
  76.     movem.l    d0-a6,-(sp)
  77.     suba    #VARSIZE,sp
  78.     move.l    sp,a5
  79.     IFD    DBUG
  80.     move.l    4.w,a6
  81.     ENDC
  82.     move.l    62(a6),d0
  83.     subq.l    #1,d0
  84.     move.l    d0,himem(a5)
  85.     move.l    $9c(a6),gfxbase(a5)
  86. * Allouer buffer pour les bitplanes & copperlist
  87.     move.l    #BUFSIZE,d0
  88.     move.l    #$10002,d1
  89.     jsr    AllocMem(a6)
  90.     move.l    d0,planes(a5)
  91.     beq.w    fin
  92.     move.l    d0,d4
  93.  
  94.     lea    rast(a5),a1
  95.     move.l    a1,-(sp)
  96.     move.l    gfxbase(a5),a6
  97.     jsr    InitRastPort(a6)
  98.  
  99.     lea    bmap(a5),a0
  100.     move.l    a0,-(sp)
  101. * adresse des bitplanes
  102. ;    lea    bm_Planes(a0),a0
  103.     addq.l    #8,a0
  104.     moveq    #DEPTH-1,d0
  105. .pladr    move.l    d4,(a0)+
  106.     add    #PLSIZE,d4
  107.     dbf    d0,.pladr
  108.     move.l    d4,bm_Planes+4(a0)
  109.     move.l    (sp)+,a0
  110.     move.l    (sp)+,a1
  111.     move.l    a0,rp_BitMap(a1)
  112.     moveq    #DEPTH,d0
  113.     move    #WIDTH,d1
  114.     move    #HEIGHT,d2
  115.     movem    d1-d2,scrw(a5)
  116.     jsr    InitBitMap(a6)
  117.  
  118.     lea    rast(a5),a1
  119.     move.l    a1,a3
  120.     moveq    #1,d0
  121.     jsr    SetAPen(a6)
  122.     move.l    a3,a1
  123.     moveq    #0,d0
  124.     jsr    SetBPen(a6)
  125.     move.l    a3,a1
  126.     moveq    #1,d0
  127.     jsr    SetDrMd(a6)
  128.  
  129.     lea    topaz8(pc),a0
  130.     move.l    154(a6),a1
  131.     move.l    10(a1),(a0)
  132.     jsr    OpenFont(a6)
  133.     move.l    d0,-(sp)
  134.     move.l    d0,a1
  135.     jsr    CloseFont(a6)
  136.     move.l    a3,a1
  137.     move.l    (sp)+,a0
  138.     jsr    SetFont(a6)
  139. ;    move.l    a3,a1
  140. ;    moveq    #FSF_BOLD,d0
  141. ;    moveq    #0,d0
  142. ;    move.l    d0,d1
  143. ;    jsr    -90(a6)        ;SetSoftStyle()
  144. .nofont
  145.     clr    xstart(a5)
  146.     move    #30,ystart(a5)
  147.  
  148.     lea    $dff000,a4
  149.     move    $02(a4),olddma(a5)
  150.     or    #$8000,olddma(a5)
  151.     move    #$7fff,$96(a4)    ;dma off
  152.  
  153.     lea    coplist(pc),a1
  154. * adresse des bitplanes
  155.     move.l    a1,-(sp)
  156.     lea    planesptr(pc),a1
  157.     move.l    planes(a5),d0
  158.     move.l    d0,a2
  159.     move    #$e0,d3
  160.     moveq    #DEPTH-1,d1
  161. .pl
  162.     move    d3,(a1)+
  163.     addq    #2,d3
  164.     swap    d0
  165.     move    d0,(a1)+
  166.     move    d3,(a1)+
  167.     addq    #2,d3
  168.     swap    d0
  169.     move    d0,(a1)+
  170.     lea    PLSIZE(a2),a2
  171.     move.l    a2,d0
  172.     dbf    d1,.pl
  173.     clr.l    (a1)
  174. * copier copperlist ds buffer
  175.     move.l    (sp)+,a1
  176.     lea    PLSIZE(a2),a2
  177.     move.l    a2,a3
  178. ;    moveq    #(COPSIZE/2)-1,d0
  179. .copy    move.l    (a1)+,(a2)+
  180.     bne.b    .copy
  181.     moveq    #-2,d0
  182.     move.l    d0,-4(a2)
  183. ;    dbf    d0,.copy
  184.  
  185.     move.l    a3,copadr(a5)
  186.     move.l    a3,$80(a4)
  187.     clr    $88(a4)
  188.     move    #%1000011111000000,$96(a4)    ;mon dma
  189.  
  190.     clr.l    src(a5)        ;src=$0
  191.     move    #DEFMOD,modulo(a5)
  192.     st    myres(a5)    ;res=HIRES
  193.  
  194. WaitLoop:
  195.     btst    #10,$dff016    ;rightmousebutton pressed?
  196.     beq.w    CloseAll    ;if yes, quit
  197.  
  198.     bsr.w    GetRawKey
  199.     cmp.b    #$40,d0        ;space
  200.     beq.b    .switch_res
  201.     cmp.b    #$46,d0        ;del
  202.     beq.b    .reset_modulo
  203.     cmp.b    #$4a,d0        ;-
  204.     beq.b    .mod_down
  205.     cmp.b    #$5e,d0        ;+
  206.     beq.b    .mod_up
  207.     cmp.b    #$4c,d0        ;arrow Up
  208.     beq.b    .adr_up
  209.     cmp.b    #$4d,d0        ;    down
  210.     beq.b    .adr_down
  211.     cmp.b    #$4f,d0        ;    left
  212.     beq.b    .adr_down2
  213.     cmp.b    #$4e,d0        ;    right
  214.     beq.b    .adr_up2
  215.     bra.b    loop
  216. .mod_down
  217.     subq    #2,modulo(a5)
  218.     bra.b    loop
  219. .mod_up
  220.     addq    #2,modulo(a5)
  221.     bra.b    loop
  222. .adr_up
  223.     add.l    #VAL-LOVAL,src(a5)
  224. .adr_up2
  225.     addq.l    #LOVAL,src(a5)
  226.     bra.b    loop
  227. .adr_down
  228.     sub.l    #VAL-LOVAL,src(a5)
  229. .adr_down2
  230.     subq.l    #LOVAL,src(a5)    
  231.     bra.b    loop
  232. .reset_modulo
  233.     clr    modulo(a5)
  234.     bra.b    loop
  235. .switch_res
  236.     bsr.w    SwitchRes
  237.  
  238. loop:
  239.     move.l    himem(a5),d0
  240.     cmp.l    src(a5),d0
  241.     bge.b    .ok0
  242.     moveq    #0,d0
  243.     bra.s    .ok
  244. .ok0    tst.l    src(a5)
  245.     bhi.b    .ok1
  246. .ok    move.l    d0,src(a5)
  247. .ok1
  248.     lea    info.txt(pc),a0
  249.     lea    src(a5),a1
  250.     moveq    #0,d0
  251.     moveq    #10,d1
  252.     bsr.w    printf
  253.  
  254.     move.l    src(a5),a0    ;source: mémoire chip
  255.     moveq    #0,d0
  256.     move    modulo(a5),d1
  257.     moveq    #0,d2            ;x
  258.     moveq    #20,d3            ;y
  259.     move    #WIDTH,d4        ;Largeur de l'img a copier
  260.     move    #230,d5            ;Hauteur
  261.     lea    rast(a5),a1        ;Cible RastPort
  262.     move.l    gfxbase(a5),a6
  263.     jsr    BltTemplate(a6)
  264.     jsr    WaitTOF(a6)
  265.     bra.w    WaitLoop
  266.  
  267. CloseAll:
  268.     move.l    planes(a5),a1
  269.     move.l    #BUFSIZE,d0
  270.     move.l    4.w,a6
  271.     jsr    FreeMem(a6)
  272. restore
  273. ;    move    #$7fff,$96(a4)
  274.     move.l    gfxbase(a5),a0
  275.     move.l    38(a0),$80(a4)        ;old coplist
  276.     clr    $88(a4)
  277.     move    olddma(a5),$96(a4)
  278. fin    add    #VARSIZE,sp
  279.     movem.l    (sp)+,d0-a6
  280.     rts
  281.  
  282. GetRawKey:
  283.     move.b    $bfec01,d0
  284.     ror.b    #1,d0
  285.     not.b    d0
  286.     rts
  287. SwitchRes:
  288.     move.l    copadr(a5),a0
  289.     clr.b    myres(a5)
  290.     btst    #15,2(a0)
  291.     bne.b    lo_res
  292.     st    myres(a5)
  293.     bra.b    hi_res
  294. lo_res
  295.     move.l    copadr(a5),a0
  296.     move    #$38,ddfstart-coplist(a0)
  297.     move    #$d0,ddfstop-coplist(a0)
  298.     eor    #$8000,2(a0)
  299.     rts
  300. hi_res
  301.     move.l    copadr(a5),a0
  302.     move    #$3c,ddfstart-coplist(a0)
  303.     move    #$d4,ddfstop-coplist(a0)
  304.     or    #$8000,2(a0)
  305.     rts
  306.  
  307. printf:
  308.     movem.l    d0-a6,-(sp)
  309.     lea    .pchr(pc),a2
  310.     lea    strbuf(a5),a3
  311.     move.l    a3,-(sp)
  312.     movem    d0-d1,-(sp)
  313.     move.l    4.w,a6
  314.     jsr    RawDoFmt(a6)
  315.     lea    rast(a5),a3
  316.     move.l    a3,a1
  317.     movem    (sp)+,d0-d1
  318.     move.l    gfxbase(a5),a6
  319.     jsr    Move(a6)
  320.     move.l    (sp)+,a0
  321.     move.l    a0,a1
  322.     moveq    #-1,d0
  323. .len    addq.l    #1,d0
  324.     tst.b    (a0)+
  325.     bne.b    .len
  326.     move.l    a1,a0
  327.     move.l    a3,a1
  328.     jsr    Text(a6)
  329.     movem.l    (sp)+,d0-a6
  330.     rts
  331. .pchr    move.b    d0,(a3)+
  332.     rts
  333.  
  334. ;ShowHelp:
  335. ;    bsr.b    hi_res        ;on se met en Hires pour afficher le texte
  336. ;    lea    help.txt(pc),a0
  337. ;    bsr.b    print
  338. ;.w    btst    #6,$bfe001
  339. ;    bne.b    .w
  340. ;    bsr.b    cls
  341. ;    bra.w    WaitLoop
  342.  
  343. *** Sortir du texte
  344. * <-- a0: adr texte (terminé par 0)
  345.     IFD    BOOT
  346. print
  347.     movem.l    d0-a6,-(sp)
  348.     move.l    a0,a4
  349.     move.l    gfxbase(a5),a6
  350.     lea    rast(a5),a3
  351.     move.l    rp_Font(a3),a1
  352.     move    tf_XSize(a1),charw(a5)
  353.     move    tf_YSize(a1),charh(a5)
  354.     addq    #1,charw(a5)
  355.     addq    #2,charh(a5)
  356.  
  357. .bcl    move.l    a4,a0
  358.     moveq    #-1,d0
  359. .len    addq.l    #1,d0
  360.     move.b    (a4)+,d1
  361.     beq.b    .ret
  362.     cmp.b    #$c,d1
  363.     beq.b    .cls
  364.     cmp.b    #$a,d1
  365.     bne.b    .len
  366.     bsr.b    Txt
  367.     movem    xstart(a5),d0-d1
  368.     bsr.b    Mov
  369.     bra.b    .bcl
  370. .ret    movem.l    (sp)+,d0-a6
  371.     rts
  372. .cls    bsr.b    Cls
  373.     bra.b    .bcl
  374.  
  375. Mov:
  376.     movem    d0-d1,xstart(a5)
  377.     lea    rast(a5),a1
  378.     move.l    gfxbase(a5),a6
  379.     jsr    Move(a6)
  380.     move    charh(a5),d0
  381.     add    d0,ystart(a5)
  382.     rts
  383. Txt:
  384.     lea    rast(a5),a1
  385.     move.l    gfxbase(a5),a6
  386.     jmp    Text(a6)
  387. Cls:
  388.     moveq    #0,d0
  389.     moveq    #0,d1
  390.     bsr.b    Mov
  391. ClrSc:
  392.     lea    rast(a5),a1
  393.     move.l    gfxbase(a5),a6
  394.     jmp    ClearScreen(a6)
  395.     ENDC
  396.  
  397. *** DATA
  398. coplist:
  399.  DC.w $0100
  400. res:
  401.  dc.w HIRES
  402.  dc.w $008E,$2981
  403.  DC.w $0090,$29c1
  404.  dc.w $0092
  405. ddfstart:
  406.  dc.w $3c
  407.  DC.w $0094
  408. ddfstop:
  409.  dc.w $D4
  410.  
  411.  dc.w $0102,0
  412.  dc.w $0108,0
  413.  
  414.  DC.w $0180,COL0
  415.  dc.w $0182,COL1
  416.  dc.w $0184,COL2
  417.  dc.w $0186,COL3
  418. planesptr:
  419.  dc.w $00e0
  420. hi1:dc.w 0
  421.  dc.w $00e2
  422. lo1:dc.w 0
  423.  dc.w $00e4
  424. hi2:dc.w 0
  425.  dc.w $00e6
  426. lo2:dc.w 0
  427.  dc.w $00e8
  428. hi3:dc.w 0
  429.  dc.w $00ea
  430. lo3:dc.w 0
  431.  dc.w $00ec
  432. hi4:dc.w 0
  433.  dc.w $00ee
  434. lo4:dc.w 0
  435.  dc.w $00f0
  436. hi5:dc.w 0
  437.  dc.w $00f2
  438. lo5:dc.w 0
  439.  dc.w $00f4
  440. hi6:dc.w 0
  441.  dc.w $00f6
  442. lo6:dc.w 0
  443.  
  444.  dc.w $FFFF,$FFFE    ;fin de la liste copper
  445. COPSIZE=*-coplist
  446. BUFSIZE=PLANESIZE+COPSIZE
  447.  
  448. topaz8    dc.l    0
  449.     dc.w    8
  450.     dc.b    0
  451.     dc.b    0
  452.  
  453. dosname:    dc.b "dos.library",0
  454. info.txt:    dc.b "ShowMem 1.0 by F.BASSALER - Addr:%08lx Mod:%04x",0
  455.  
  456. End:
  457.     dcb.b    512*2
  458.